package com.lc.railway.util;

import android.graphics.Color;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;
import android.widget.TextView;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class FindUtil {
    /**
     * 关键字高亮变色
     *
     * @param color   变化的色值
     * @param text    文字
     * @param keyword 文字中的关键字
     * @return
     */
    public static SpannableString findSearch(int color, String text, String keyword) {
        SpannableString s = new SpannableString(text);
        Pattern p = Pattern.compile(keyword);
        Matcher m = p.matcher(s);
        while (m.find()) {
            int start = m.start();
            int end = m.end();
            s.setSpan(new ForegroundColorSpan(color), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        return s;
    }

    /**
     * 多个关键字高亮变色
     *
     * @param color   变化的色值
     * @param text    文字
     * @param keyword 文字中的关键字数组
     * @return
     */
    public static SpannableString findSearch(int color, String text, String...keyword) {
        SpannableString s = new SpannableString(text);
        for (int i = 0; i < keyword.length; i++) {
            Pattern p = Pattern.compile(keyword[i]);
            Matcher m = p.matcher(s);
            while (m.find()) {
                int start = m.start();
                int end = m.end();
                s.setSpan(new ForegroundColorSpan(color), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            }
        }
        return s;
    }

    /**
     * 字符串高亮显示部分文字
     * @param textView  控件
     * @param str1      要高亮显示的文字（输入的关键词）
     * @param str2      包含高亮文字的字符串
     */
    public static void setTextHighLight(TextView textView, String str1, String str2) {

        SpannableString sp = new SpannableString(str2);
        // 遍历要显示的文字
        for (int i = 0 ; i < str1.length() ; i ++){
            // 得到单个文字
            String s1 = str1.charAt(i) + "";
            // 判断字符串是否包含高亮显示的文字
            if (str2.contains(s1)){
                // 查找文字在字符串的下标
                int index = str2.indexOf(s1);
                // 循环查找字符串中所有该文字并高亮显示
                while (index != -1) {
                    ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#db384c"));
                    sp.setSpan(colorSpan, index, index + 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
                    // s1从这个索引往后开始第一个出现的位置
                    index = str2.indexOf(s1, index + 1);
                }
            }
        }
        // 设置控件
        textView.setText(sp);
    }

}
